home *** CD-ROM | disk | FTP | other *** search
/ NOVA - For the NeXT Workstation / NOVA - For the NeXT Workstation.iso / Apps / Utilities / Unix / WhosOnFirst / ProcessManager.m < prev    next >
Text File  |  1992-12-26  |  4KB  |  146 lines

  1. #import "ProcessManager.h"
  2. #import <signal.h>
  3.  
  4. /*===========================================================================
  5.  
  6.     File: ProcessManager.m
  7.  
  8.     Purpose:  This file implements the following:
  9.             o tty listing
  10.             o user process listing 
  11.             o tty logout
  12.  
  13.     Algorithm: This function opens a pipe to the UNIX command ps.
  14.  
  15.     Note: Because this file relies on the results of another execed
  16.         program, there are potential security holes if this 
  17.         program is run setuid.  Please do not run this program
  18.         setuid unless you know what you are doing.
  19.  
  20. ===========================================================================*/
  21.  
  22. id processManager;
  23.  
  24. @implementation ProcessManager
  25.  
  26.  
  27. - init
  28. {
  29.     [super init];
  30.  
  31.     processManager = self;
  32.     return self;
  33. }
  34.  
  35. /*===========================================================================
  36.  
  37.     Method: readTTYProcesses: tty
  38.  
  39.     Purpose: To get process information about the terminal "tty" and 
  40.         display    this information in the Text Object refered to by the 
  41.         pointer "myTextObject"
  42.  
  43. ===========================================================================*/
  44. - readTTYProcesses: (char *) tty
  45. {
  46. FILE *fp;
  47. char tempPipe[256], line[1024];
  48. char buffer[20480];
  49.  
  50.     [myWindow makeKeyAndOrderFront:self];
  51.     sprintf(tempPipe,"/bin/ps -auxwt%s | grep -v '/bin/ps'", tty);
  52.     bzero(buffer, 20480);
  53.     fp = popen(tempPipe, "r");
  54.     if (fp == NULL)
  55.         NXRunAlertPanel("TTY Process Listing", "Cannot open Pipe to ps", "Ok", NULL, NULL);
  56.     else
  57.     {
  58.         while(fgets(line, 1024, fp))
  59.             strcat(buffer,line);
  60.         fclose(fp);
  61.         [myTextObject setText:buffer];
  62.     }
  63.  
  64.     return(self);
  65.  
  66. }
  67.  
  68. /*===========================================================================
  69.  
  70.     Method: readUserProcesses: name
  71.  
  72.     Purpose: To get process information about the user "name" and 
  73.         display    this information in the Text Object refered to by the 
  74.         pointer "myTextObject"
  75.  
  76. ===========================================================================*/
  77. - readUserProcesses: (char *) name
  78. {
  79. FILE *fp;
  80. char tempPipe[256], line[1024];
  81. char buffer[20480];
  82.  
  83.     [myWindow makeKeyAndOrderFront:self];
  84.     sprintf(tempPipe,"/bin/ps -auxw | grep %s | grep -v '/bin/ps' | grep -v grep", name);
  85.     bzero(buffer, 20480);
  86.     strcpy(buffer,"USER       PID  %CPU %MEM VSIZE RSIZE TT STAT  TIME COMMAND\n");
  87.     fp = popen(tempPipe, "r");
  88.     if (fp == NULL)
  89.         NXRunAlertPanel("TTY Process Listing", "Cannot open Pipe to ps", "Ok", NULL, NULL);
  90.     else
  91.     {
  92.         while(fgets(line, 1024, fp))
  93.             strcat(buffer,line);
  94.         fclose(fp);
  95.         [myTextObject setText:buffer];
  96.     }
  97.  
  98.     return(self);
  99.  
  100. }
  101.  
  102.  
  103. /*===========================================================================
  104.  
  105.     Method: logoutTTY: tty
  106.  
  107.     Purpose: To kill the csh (sh/tcsh) associated with terminal TTY. 
  108.  
  109.     Feedback: An alert panel is displayed if the terminal could not 
  110.         be killed.
  111.  
  112.     NOTE:  Some people may want to run WhosOnFirst setuid root so that
  113.         the person on the console can kill any user.  This is OK, 
  114.         but make sure you understand the security implications 
  115.         of running this program setuid root.
  116.  
  117.         (Personally, I wouldn't run this program setuid root). :-)
  118.  
  119. ===========================================================================*/
  120. - logoutTTY:(char *) ttyname
  121. {
  122. FILE *fp;
  123. char tempPipe[256], line[1024];
  124. int pid;
  125.  
  126.     sprintf(tempPipe,"/bin/ps -xt%s | grep 'sh)'", ttyname);
  127.     fp = popen(tempPipe, "r");
  128.     if (fp == NULL)
  129.         NXRunAlertPanel("Logout TTY", "Cannot open Pipe to ps", "Ok", NULL, NULL);
  130.     else
  131.     {
  132.         fgets(line, 1024, fp);
  133.         fclose(fp);
  134.         sscanf(line, "%d", &pid);
  135.         if (kill(pid, SIGKILL)!=0)
  136.             NXRunAlertPanel("Logout TTY", "Cannot kill terminal %s", "Ok", NULL, NULL, ttyname);
  137.     }
  138.  
  139.     return(self);
  140.  
  141.  
  142.  
  143. }
  144.  
  145. @end
  146.